﻿using System.Collections.Specialized;

namespace LxBasic
{
    //public class CellsCut
    //{
    //    public CellsCut() { }
    //    public CellsCut(int capacity)
    //    {
    //        CheckCreator.ArrayEnough(ref _Cells, capacity);
    //    }
    //    //own
    //    private CellFlag[] _Cells;
    //    private CutFlag[] _Cuts;
    //    //own FLAG
    //    private readonly int FLAG_Out = -2;
    //    private readonly int FLAG_Ready = -1;
    //    //share
    //    private ICellTopology zone;
    //    private IndexRange indexRange;
    //    private int[] splitNumber;
    //    public void Split(ICellTopology zone, IndexRange indexRange, int[] splitNumber)//要求只有一个连通域，提供拓扑关系，提供每一组分多少数量
    //    {
    //        int count = 0;
    //        foreach (var i in splitNumber)
    //        {
    //            if (i <= 0)
    //            {
    //                throw new Exception("Cell Cut Error : Split 1");
    //            }
    //            count += i;
    //        }
    //        if (count != indexRange.GetCount())
    //        {
    //            throw new Exception("Cell Cut Error : Split 2");
    //        }
    //        this.zone = zone;
    //        this.indexRange = indexRange;
    //        this.splitNumber = splitNumber;
    //    }
    //    private void Initialize()
    //    {
    //        CheckCreator.ArrayEnough(ref _Cells, indexRange.End);
    //        LxTool.FillArray(_Cells, new CellFlag() { InCut = FLAG_Ready }, indexRange);
    //        fillOut(new IndexRange(0, indexRange.Start));
    //        fillOut(new IndexRange(indexRange.End, _Cells.Length));
    //        void fillOut(IndexRange idxrange)
    //        {
    //            if (idxrange.GetCount() > 0)
    //            {
    //                LxTool.FillArray(_Cells, new CellFlag() { InCut = FLAG_Out }, idxrange);
    //            }
    //        }

    //    }
    //    private void InitialCut()
    //    {
    //        int cutId = 0;
    //        for (int i1 = indexRange.Start; i1 < indexRange.End; i1++)
    //        {
    //            int incut = _Cells[i1].InCut;
    //            if (incut >= 0)
    //            {

    //            }
    //            else if (incut == FLAG_Ready)
    //            {
    //                ///////////
    //                ///



    //                cutId++;
    //            }
    //            else
    //            {
    //                throw new InvalidDataException("Cell Cut Error 1");
    //            }
    //        }
    //    }
    //    private void FindCutCenter()
    //    {

    //    }
    //    private void MakeLayerFlag()
    //    {

    //    }
    //    private void AdjustTwoCut()
    //    {

    //    }

    //}
    //public struct CellFlag
    //{
    //    public int InCut;
    //    public int LayerIdx;
    //    public int SecondLayerIdx;
    //    public int NextCellInCut;
    //}
    //public struct CutFlag
    //{
    //    public int CutCount;
    //    public int CenterCell;
    //    public IdLinkList Cells;
    //}
    //public interface ICellTopology
    //{
    //    IEnumerable<int> GetAdjInnCelll(int cellId);
    //    IEnumerable<int> GetAdjBCelll(int cellId);

    //}
}
